# 如果非要在内部函数去修改外部函数的变量，也不是不可以，使用 nonlocal
def func_a():
    x = 520

    # 在函数中嵌套一个函数，该函数无法被外部调用
    def func_b():
        nonlocal x  # 如果非要在内部函数去修改外部函数的变量，也不是不可以，使用 nonlocal
        x = 880  # 在内部函数修改了外部函数的变量 x
        print("In func_b, x = ", x)

    # 只能在 func_a 中调用 func_b 函数
    func_b()
    print("In func_a, x = ", x)


# In func_b, x =  880
# In func_a, x =  880
func_a()


# LEGB 规则
# L：local 局部作用域
# E：enclosed 嵌套函数的外层函数的作用域
# G：global 全局作用域
# B：Build-In 内置作用域

# 被毁掉之前的 Build-in 函数
print(str(520))

# str = '小甲鱼把函数str给毁了'
# print(str(520))  # TypeError: 'str' object is not callable

# 所以，不要使用跟内置函数(Build-In)相同的变量名